package com.mego.tzadd.database.manager;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

import java.io.File;
import java.io.IOException;
import java.util.Objects;


public class GreenDaoContext extends ContextWrapper {

    private String currentUserId = "greendao";//一般用来针对一个用户一个数据库，以免数据混乱问题

    public GreenDaoContext(Context base) {
        super(base);
    }

    public String getFilesPath(Context context) {
        String filePath;
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) {
//外部存储可用
            filePath = context.getExternalFilesDir(null).getPath();
        } else {
//外部存储不可用
            filePath = context.getFilesDir().getPath();
        }
        return filePath;
    }
    /**
     * 获得数据库路径，如果不存在，则创建对象
     *
     * @param name
     */
    @Override
    public File getDatabasePath(String name) {
//        File externalFileRootDir = getExternalFilesDir(null);
//        do {
//            externalFileRootDir = Objects.requireNonNull(externalFileRootDir).getParentFile();
//        } while (Objects.requireNonNull(externalFileRootDir).getAbsolutePath().contains("/Android"));
//
//        String saveDir = Objects.requireNonNull(externalFileRootDir).getAbsolutePath();
//
//        String dbDir = saveDir + "/Mego/";

        String dbDir = getFilesPath(getBaseContext()) + "/Mego/";
//        String dbDir = Environment.getExternalStorageDirectory() + "/Mego/";
        File file = new File(dbDir);
        if (file.exists()) {
            file.mkdir();
        }

        File baseFile = new File(dbDir);
        // 目录不存在则自动创建目录
        if (!baseFile.exists()) {
            baseFile.mkdirs();
        }
        StringBuffer buffer = new StringBuffer();
        buffer.append(baseFile.getPath());
        buffer.append(File.separator);
        buffer.append(currentUserId);
        dbDir = buffer.toString();// 数据库所在目录
        buffer.append(File.separator);
        buffer.append(name);
        String dbPath = buffer.toString();// 数据库路径
        // 判断目录是否存在，不存在则创建该目录
        File dirFile = new File(dbDir);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        // 数据库文件是否创建成功
        boolean isFileCreateSuccess = false;
        // 判断文件是否存在，不存在则创建该文件
        File dbFile = new File(dbPath);
        if (!dbFile.exists()) {
            try {
                isFileCreateSuccess = dbFile.createNewFile();// 创建文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else
            isFileCreateSuccess = true;
        // 返回数据库文件对象
        if (isFileCreateSuccess)
            return dbFile;
        else
            return super.getDatabasePath(name);
    }

    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,
                                               DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
        return result;
    }
}
